/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package db;

import beans.*;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import conexion.Conexion;
import java.sql.Types;

/**
 * @author JoseHernan Created on : 30-sep-2014, 22:53:57
 */
public class DB_RolPermiso {

    public static ArrayList<B_RolPermiso> getList(int id) {
        ArrayList<B_RolPermiso> list = new ArrayList<B_RolPermiso>();
        try {
            Connection con = Conexion.getConexion();

            PreparedStatement ps;
            ResultSet rs;
            if (id == 0) {
                ps = con.prepareStatement(" SELECT p.id, p.id_rol, r.nombre as rol, p.id_accion_pagina, t.nombre as tipo_accion, pa.nombre_muestra_singular as pagina FROM tbl_rol_permisos p inner join tbl_rol r on r.id = p.id_rol inner join tbl_accion_pagina a on a.id = p.id_accion_pagina inner join tbl_tipo_accion_pagina t on t.id = a.id_tipo_accion_pagina inner join tbl_pagina pa on pa.id = a.id_pagina where p.removed = false ");
            } else {
                ps = con.prepareStatement(" SELECT p.id, p.id_rol, r.nombre as rol, p.id_accion_pagina, t.nombre as tipo_accion, pa.nombre_muestra_singular as pagina FROM tbl_rol_permisos p inner join tbl_rol r on r.id = p.id_rol inner join tbl_accion_pagina a on a.id = p.id_accion_pagina inner join tbl_tipo_accion_pagina t on t.id = a.id_tipo_accion_pagina inner join tbl_pagina pa on pa.id = a.id_pagina where p.removed = false and p.id = " + id);
            }
            rs = ps.executeQuery();
            B_RolPermiso obj;
            B_AccionPagina objAccionPagina;
            B_Rol objRol;
            B_TipoAccionPagina objTipoAccionPagina;
            B_Pagina objPagina;
            while (rs.next()) {
                obj = new B_RolPermiso();
                //Asign values
                obj.setId(rs.getInt(1));
                objRol = new B_Rol();
                objRol.setId(rs.getInt(2));
                objRol.setNombre(rs.getString(3));
                obj.setObjRol(objRol);
                objAccionPagina = new B_AccionPagina();
                objAccionPagina.setId(rs.getInt(4));
                objTipoAccionPagina = new B_TipoAccionPagina();
                objTipoAccionPagina.setNombre(rs.getString(5));
                objAccionPagina.setObjTipoAccionPagina(objTipoAccionPagina);
                objPagina = new B_Pagina();
                objPagina.setNombreMuestraSingular(rs.getString(6));
                objAccionPagina.setObjPagina(objPagina);
                obj.setObjAccionPagina(objAccionPagina);
                //Add to List
                list.add(obj);
            }
            rs.close();
            ps.close();
            con.close();
        } catch (Exception ex) {
            System.out.println(ex);
        }
        return list;
    }

    //SP CRUD
    public static String crud(B_RolPermiso obj, String action) {
        String result = "";
        CallableStatement cs = null;
        Connection con = Conexion.getConexion();
        try {
            cs = con.prepareCall("{call sp_crud_rol_permisos(?,?,?,?,?,?)}");

            cs.registerOutParameter(1, Types.VARCHAR);
            cs.setString(2, action);
            cs.setInt(3, obj.getId());
            cs.setInt(4, obj.getObjAccionPagina().getId());
            cs.setInt(5, obj.getObjRol().getId());
            cs.setString(6, obj.getUser());
            cs.executeUpdate();
            result = cs.getString(1);
        } catch (Exception ex) {
            result = ex.getMessage();
        } finally {
            try {
                cs.close();
                con.close();
            } catch (Exception ex) {
                System.out.println(ex);
            }
        }
        return result;
    }

    public static ArrayList<B_RolPermiso> getPermisos(int idUsuario) {
        ArrayList<B_RolPermiso> list = new ArrayList<B_RolPermiso>();
        try {
            Connection con = Conexion.getConexion();

            PreparedStatement ps;
            ResultSet rs;
            ps = con.prepareStatement(" SELECT ap.id_pagina, ap.id_tipo_accion_pagina, pa.nombre_muestra_plural, pa.url, pa.id_modulo, pa.nombre_muestra_singular, pa.nombre_referencia FROM tbl_rol_permisos rp inner join tbl_accion_pagina ap on ap.id = rp.id_accion_pagina inner join tbl_pagina pa on pa.id = ap.id_pagina inner join tbl_modulo mo on pa.id_modulo = mo.id inner join tbl_perfil pe on pe.id_rol = rp.id_rol where rp.removed = false and pe.id_usuario = " + idUsuario + " group by ap.id_pagina order by mo.nombre, pa.nombre_muestra_singular, ap.id_tipo_accion_pagina ");
            rs = ps.executeQuery();
            B_RolPermiso obj;
            B_AccionPagina objAccionPagina;
            B_TipoAccionPagina objTipoAccionPagina;
            B_Pagina objPagina;
            B_Modulo objModulo;
            while (rs.next()) {
                obj = new B_RolPermiso();
                //Asign values
                objAccionPagina = new B_AccionPagina();
                objModulo = new B_Modulo();
                objModulo.setId(rs.getInt("id_modulo"));
                objPagina = new B_Pagina();
                objPagina.setId(rs.getInt("id_pagina"));
                objPagina.setUrl(rs.getString("url"));
                objPagina.setNombreMuestraSingular(rs.getString("nombre_muestra_singular"));
                objPagina.setNombreReferencia(rs.getString("nombre_referencia"));
                objPagina.setNombreMuestraPlural(rs.getString("nombre_muestra_plural"));
                objPagina.setObjModulo(objModulo);
                objAccionPagina.setObjPagina(objPagina);
                objTipoAccionPagina = new B_TipoAccionPagina();
                objTipoAccionPagina.setId(rs.getInt("id_tipo_accion_pagina"));
                objAccionPagina.setObjTipoAccionPagina(objTipoAccionPagina);
                obj.setObjAccionPagina(objAccionPagina);
                //Add to List
                list.add(obj);
            }
            rs.close();
            ps.close();
            con.close();
        } catch (Exception ex) {
            System.out.println(ex);
        }
        return list;
    }

    public static ArrayList<B_RolPermiso> getPermisosPagina(int idUsuario, int idPagina) {
        ArrayList<B_RolPermiso> list = new ArrayList<B_RolPermiso>();
        try {
            Connection con = Conexion.getConexion();

            PreparedStatement ps;
            ResultSet rs;
            ps = con.prepareStatement(" SELECT ap.id_pagina, ap.id_tipo_accion_pagina, tap.nombre as tipo_accion_pagina, pa.nombre_muestra_plural, pa.nombre_muestra_singular, pa.nombre_referencia, pa.url FROM tbl_rol_permisos rp inner join tbl_accion_pagina ap on ap.id = rp.id_accion_pagina inner join tbl_tipo_accion_pagina tap on ap.id_tipo_accion_pagina = tap.id inner join tbl_pagina pa on pa.id = ap.id_pagina inner join tbl_perfil pe on pe.id_rol = rp.id_rol where rp.removed = false and pe.id_usuario = " + idUsuario + " and ap.id_pagina = " + idPagina + " order by pa.nombre_muestra_singular, ap.id_tipo_accion_pagina ");
            rs = ps.executeQuery();
            B_RolPermiso obj;
            B_AccionPagina objAccionPagina;
            B_TipoAccionPagina objTipoAccionPagina;
            B_Pagina objPagina;
            while (rs.next()) {
                obj = new B_RolPermiso();
                //Asign values
                objAccionPagina = new B_AccionPagina();
                objPagina = new B_Pagina();
                objPagina.setId(rs.getInt("id_pagina"));
                objPagina.setUrl(rs.getString("url"));
                objPagina.setNombreMuestraSingular(rs.getString("nombre_muestra_singular"));
                objPagina.setNombreReferencia(rs.getString("nombre_referencia"));
                objPagina.setNombreMuestraPlural(rs.getString("nombre_muestra_plural"));
                objAccionPagina.setObjPagina(objPagina);
                objTipoAccionPagina = new B_TipoAccionPagina();
                objTipoAccionPagina.setId(rs.getInt("id_tipo_accion_pagina"));
                objTipoAccionPagina.setNombre(rs.getString("tipo_accion_pagina"));
                objAccionPagina.setObjTipoAccionPagina(objTipoAccionPagina);
                obj.setObjAccionPagina(objAccionPagina);
                //Add to List
                list.add(obj);
            }
            rs.close();
            ps.close();
            con.close();
        } catch (Exception ex) {
            System.out.println(ex);
        }
        return list;
    }
}
